package metrics

//CounterOpts is options to create a counter options
type CounterOpts struct {
	Namespace string
	Subsystem string
	Name      string
	Help      string
	Labels    []string
}

//GaugeOpts is options to create a gauge collector
type GaugeOpts struct {
	Namespace string
	Subsystem string
	Name      string
	Help      string
	Labels    []string
}

//SummaryOpts is options to create summary collector
type SummaryOpts struct {
	Namespace  string
	Subsystem  string
	Name       string
	Help       string
	Labels     []string
	Objectives map[float64]float64
}

//HistogramOpts is options to create histogram collector
type HistogramOpts struct {
	Namespace string
	Subsystem string
	Name      string
	Help      string
	Labels    []string
	Buckets   []float64
}

//Registry holds all of metrics collectors
//name is a unique ID for different type of metrics
type Registry interface {
	CreateGauge(opts GaugeOpts) error
	CreateCounter(opts CounterOpts) error
	CreateSummary(opts SummaryOpts) error
	CreateHistogram(opts HistogramOpts) error

	GaugeSet(name string, val float64, labels map[string]string) error
	CounterAdd(name string, val float64, labels map[string]string) error
	SummaryObserve(name string, val float64, Labels map[string]string) error
	HistogramObserve(name string, val float64, labels map[string]string) error
}
